define [
  'chaplin'
  'lib/enums'
  'alertify'
], (Chaplin, Enums, alertify) ->

  'use strict'

  # Configurações do alertify
  alertify.set
    delay: 3000

  feedback = {}

  # Extende o EventBroker do Chapln, para a escuta de eventos globais da aplicação
  _(feedback).extend Chaplin.EventBroker

  showAlert = (text, type) ->
    # Procura se o texto está tratada pelo Enum "messages"
    # Caso não esteja, retorna o texto original
    text = Enums.messages[text] or text
    alertify.success text

  showError = (text, type) ->
    text = Enums.messages[text] or text
    alertify.error text

  showInfo = (text, type) ->
    text = Enums.messages[text] or text
    alertify.log text

  # Eventos que devem ser disparados pela aplicação para a exibição das notificações
  feedback.subscribeEvent 'feedback:success' , (text) -> showAlert text, 'success'
  feedback.subscribeEvent 'feedback:error'   , (text) -> showError text, 'error'
  feedback.subscribeEvent 'feedback:info'    , (text) -> showAInfo text, 'info'